package com.yeban.javase.day11.test01;

import java.util.HashMap;
import java.util.Map;

/**
 * @Desc TODO
 * @Author yeban
 * @Date 2025/10/20
 */
public class Card implements Comparable<Card>{

    private String color;    // 花色
    private String num;    // 牌数
    private int index;       // 索引

    public Card() {
    }

    public Card(String color, String value, int index) {
        this.color = color;
        this.num = value;
        this.index = index;
    }

    /*// 用于斗地主排序的权重表
    private static final Map<String, Integer> RANK_VALUE = new HashMap<>();
    static {
        // 从小到大排（越大越强）
        RANK_VALUE.put("3", 3);
        RANK_VALUE.put("4", 4);
        RANK_VALUE.put("5", 5);
        RANK_VALUE.put("6", 6);
        RANK_VALUE.put("7", 7);
        RANK_VALUE.put("8", 8);
        RANK_VALUE.put("9", 9);
        RANK_VALUE.put("10", 10);
        RANK_VALUE.put("J", 11);
        RANK_VALUE.put("Q", 12);
        RANK_VALUE.put("K", 13);
        RANK_VALUE.put("A", 14);
        RANK_VALUE.put("2", 15);
        RANK_VALUE.put("Little Joker", 16);
        RANK_VALUE.put("Big Joker", 17);
    }

    // 斗地主规则排序
    @Override
    public int compareTo(Card o) {
        int thisValue = RANK_VALUE.getOrDefault(this.num, 0);
        int otherValue = RANK_VALUE.getOrDefault(o.num, 0);
        // 先比牌面大小
        if (thisValue != otherValue) {
            return Integer.compare(thisValue, otherValue);
        }
        // 牌面相同时，可以按花色区分 ♠ > ♥ > ♣ > ♦
        return getSuitValue(this.color) - getSuitValue(o.color);
    }

    private int getSuitValue(String suit) {
        switch (suit) {
            case "♠": return 4;
            case "♥": return 3;
            case "♣": return 2;
            case "♦": return 1;
            default: return 0;
        }
    }*/

    // 重写比较方法
    @Override
    public int compareTo(Card o) {
        // 升序：小牌在前
        // return Integer.compare(this.index, o.index);
        return this.index - o.index;
    }

    /**
     * 获取
     * @return color
     */
    public String getColor() {
        return color;
    }

    /**
     * 设置
     * @param color
     */
    public void setColor(String color) {
        this.color = color;
    }

    /**
     * 获取
     * @return value
     */
    public String getValue() {
        return num;
    }

    /**
     * 设置
     * @param value
     */
    public void setValue(String value) {
        this.num = value;
    }

    /**
     * 获取
     * @return index
     */
    public int getIndex() {
        return index;
    }

    /**
     * 设置
     * @param index
     */
    public void setIndex(int index) {
        this.index = index;
    }

    public String toString() {
        return color + num/* + index*/;
    }
}
